package br.requisiteworks.requisito.modelo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import br.requisiteworks.util.Entidade;
import br.requisiteworks.util.validacao.Nome;

/**
 * Definicao de um atributo de um tipo de requisito
 * 
 * @author Mikhail Domanoski
 * 
 * @version 1, 01/04/2010
 */
@Entity
@Table(name = "tbl_atributo_tipo")
public class AtributoTipoRequisito extends Entidade {

	/**
	 * Numero do tipo de atributo
	 */
	@Id
	@Column(name = "num_atrib_tipo")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int numero;

	/**
	 * Nome do tipo de atributo
	 */
	@Nome
	@Column(name = "nom_atrib_tipo")
	private String nome;

	/**
	 * Tipo de dado do Atributo
	 */
	@Column(name = "nom_tipo_dado", nullable = false)
	@Enumerated(EnumType.STRING)
	private TipoDado tipoDado;

	/**
	 * Indica se o atributo deve ser preenchido ou e opcional
	 */
	@Column(name = "ind_obrig")
	private boolean obrigatorio;

	@ManyToOne(targetEntity = TipoRequisito.class, fetch = FetchType.EAGER)
	@JoinColumn(name = "num_tipo_requi")
	private TipoRequisito tipoRequisito;

	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public TipoDado getTipoDado() {
		return tipoDado;
	}

	public void setTipoDado(TipoDado tipoDado) {
		this.tipoDado = tipoDado;
	}

	public void setObrigatorio(boolean obrigatorio) {
		this.obrigatorio = obrigatorio;
	}

	public boolean isObrigatorio() {
		return obrigatorio;
	}

	public boolean getObrigatorio() {
		return obrigatorio;
	}

	public void setTipoRequisito(TipoRequisito tipoRequisito) {
		this.tipoRequisito = tipoRequisito;
	}

	public TipoRequisito getTipoRequisito() {
		return this.tipoRequisito;
	}

	@Override
	public String toString() {
		return this.nome + ":" + this.tipoDado;
	}

}
